package leetcode_jz_offer.day19_huisuAndBinTree;

/**
 * 求 1+2+...+n ，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）
 **/

/**
 * 以逻辑运算符&&为例，对于A&&B这个表达式，如果A表达式返回False，那么A&&B已经确定为False，此时不会去执行表达式B。
 * 同理，对于逻辑运算符||，对于A||B这个表达式，如果A表达式返回True，那么A||B已经确定为True，此时不会去执行表达式B。
 *
 * 利用这一特性，我们可以将判断是否为递归的出口看作A&&B表达式中的A部分，递归的主体函数看作B部分。
 * 如果不是递归出口，则A部分返回True，并继续执行表达式B的部分，否则递归结束。(结合逻辑运算符 && 的递归实现)
 */
public class Num64_求1加到n的和 {
    public int sumNums(int n) {
        //n>0时会执行加法（加法的值恒true），当加完1后n=0，此时B部分不会执行，就不会再递归，直接return n
        boolean flag=n>0&&(n+=sumNums(n-1))>0;
        return n;
    }
}
